package cc.cc4414.cc02.chat.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import cc.cc4414.cc02.chat.entity.Friend;
import cc.cc4414.cc02.chat.service.FriendService;
import cc.cc4414.cc02.core.controller.BaseController;
import cc.cc4414.cc02.core.result.ResultVO;

/**
 * @author cc 2018年8月16日
 */
@RestController
@RequestMapping("/friend")
public class FriendController extends BaseController {

	@Autowired
	private FriendService friendService;

	/**
	 * 申请添加好友，有如下几种失败情况
	 * 
	 * 1.用户不存在;2.已和该用户有关系;3.自己是对方的黑名单
	 * 
	 * @param id
	 *            好友id
	 * @return 是否成功申请添加好友
	 */
	@PostMapping("add")
	public ResultVO<Object> add(@RequestParam Long id) {
		friendService.add(getUser().getId(), id);
		return new ResultVO<>();
	}

	/**
	 * 取消关注（添加好友申请）
	 * 
	 * @param id
	 *            好友id
	 * @return 是否取消成功
	 */
	@PostMapping("cancelAdd")
	public ResultVO<Object> cancelAdd(@RequestParam Long id) {
		friendService.cancelAdd(getUser().getId(), id);
		return new ResultVO<>();
	}

	/**
	 * 同意添加对方为好友（双方互为好友）
	 * 
	 * @param id
	 *            申请添加我为好友的用户id
	 * @return 是否接受成功
	 */
	@PostMapping("accept")
	public ResultVO<Object> accept(@RequestParam Long id) {
		friendService.accept(getUser().getId(), id);
		return new ResultVO<>();
	}

	/**
	 * 删除好友
	 * 
	 * @param id
	 *            好友id
	 * @return 是否删除成功
	 */
	@PostMapping("delete")
	public ResultVO<Object> delete(@RequestParam Long id) {
		friendService.delete(getUser().getId(), id);
		return new ResultVO<>();
	}

	/**
	 * 添加对方为黑名单
	 * 
	 * @param id
	 *            对方id
	 * @return 是否添加黑名单成功
	 */
	@PostMapping("addBlacklist")
	public ResultVO<Object> addBlacklist(@RequestParam Long id) {
		friendService.addBlacklist(getUser().getId(), id);
		return new ResultVO<>();
	}

	/**
	 * 将对方移除黑名单
	 * 
	 * @param id
	 *            对方id
	 * @return 是否移除黑名单成功
	 */
	@PostMapping("removeBlacklist")
	public ResultVO<Object> removeBlacklist(@RequestParam Long id) {
		friendService.removeBlacklist(getUser().getId(), id);
		return new ResultVO<>();
	}

	/**
	 * 查询所有自己的关注、好友及黑名单
	 * 
	 * @return 查询到的数据
	 */
	@GetMapping("findFriends")
	public ResultVO<List<Friend>> findFriends() {
		return new ResultVO<>(friendService.findFriends(getUser().getId()));
	}

	/**
	 * 查询所有想添加自己为好友的用户
	 * 
	 * @return 查询到的数据
	 */
	@GetMapping("findAddMe")
	public ResultVO<List<Friend>> findAddMe() {
		return new ResultVO<>(friendService.findAddMe(getUser().getId()));
	}

}
